home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / djgpp / src / binutils.252 / binutils / bucomm.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-09-16  |  3.3 KB  |  139 lines

  1. /* bucomm.c -- Bin Utils COMmon code.
  2.    Copyright (C) 1991, 92, 93, 94 Free Software Foundation, Inc.
  3.  
  4.    This file is part of GNU Binutils.
  5.  
  6.    This program is free software; you can redistribute it and/or modify
  7.    it under the terms of the GNU General Public License as published by
  8.    the Free Software Foundation; either version 2 of the License, or
  9.    (at your option) any later version.
  10.  
  11.    This program is distributed in the hope that it will be useful,
  12.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.    GNU General Public License for more details.
  15.  
  16.    You should have received a copy of the GNU General Public License
  17.    along with this program; if not, write to the Free Software
  18.    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  19.  
  20. /* We might put this in a library someday so it could be dynamically
  21.    loaded, but for now it's not necessary.  */
  22.  
  23. #include "bfd.h"
  24. #include "sysdep.h"
  25. #include "libiberty.h"
  26. #include "bucomm.h"
  27.  
  28. #ifdef ANSI_PROTOTYPES
  29. #include <stdarg.h>
  30. #else
  31. #include <varargs.h>
  32. #endif
  33.  
  34. char *target = NULL;        /* default as late as possible */
  35.  
  36. /* Error reporting */
  37.  
  38. char *program_name;
  39.  
  40. void
  41. bfd_nonfatal (string)
  42.      CONST char *string;
  43. {
  44.   CONST char *errmsg = bfd_errmsg (bfd_get_error ());
  45.  
  46.   if (string)
  47.     fprintf (stderr, "%s: %s: %s\n", program_name, string, errmsg);
  48.   else
  49.     fprintf (stderr, "%s: %s\n", program_name, errmsg);
  50. }
  51.  
  52. void
  53. bfd_fatal (string)
  54.      CONST char *string;
  55. {
  56.   bfd_nonfatal (string);
  57.   xexit (1);
  58. }
  59.  
  60. #ifdef ANSI_PROTOTYPES
  61. void
  62. fatal (const char *format, ...)
  63. {
  64.   va_list args;
  65.  
  66.   fprintf (stderr, "%s: ", program_name);
  67.   va_start (args, format);
  68.   vfprintf (stderr, format, args);
  69.   va_end (args);
  70.   putc ('\n', stderr);
  71.   xexit (1);
  72. }
  73. #else
  74. void 
  75. fatal (va_alist)
  76.      va_dcl
  77. {
  78.   char *Format;
  79.   va_list args;
  80.  
  81.   fprintf (stderr, "%s: ", program_name);
  82.   va_start (args);
  83.   Format = va_arg (args, char *);
  84.   vfprintf (stderr, Format, args);
  85.   va_end (args);
  86.   putc ('\n', stderr);
  87.   xexit (1);
  88. }
  89. #endif
  90.  
  91. /* After a false return from bfd_check_format_matches with
  92.    bfd_get_error () == bfd_error_file_ambiguously_recognized, print the possible
  93.    matching targets.  */
  94.  
  95. void
  96. list_matching_formats (p)
  97.      char **p;
  98. {
  99.   fprintf(stderr, "%s: Matching formats:", program_name);
  100.   while (*p)
  101.     fprintf(stderr, " %s", *p++);
  102.   fprintf(stderr, "\n");
  103. }
  104.  
  105. /* Display the archive header for an element as if it were an ls -l listing:
  106.  
  107.    Mode       User\tGroup\tSize\tDate               Name */
  108.  
  109. void
  110. print_arelt_descr (file, abfd, verbose)
  111.      FILE *file;
  112.      bfd *abfd;
  113.      boolean verbose;
  114. {
  115.   struct stat buf;
  116.  
  117.   if (verbose)
  118.     {
  119.       if (bfd_stat_arch_elt (abfd, &buf) == 0)
  120.     {
  121.       char modebuf[11];
  122.       char timebuf[40];
  123.       time_t when = buf.st_mtime;
  124.       CONST char *ctime_result = (CONST char *) ctime (&when);
  125.  
  126.       /* POSIX format:  skip weekday and seconds from ctime output.  */
  127.       sprintf (timebuf, "%.12s %.4s", ctime_result + 4, ctime_result + 20);
  128.  
  129.       mode_string (buf.st_mode, modebuf);
  130.       modebuf[10] = '\0';
  131.       /* POSIX 1003.2/D11 says to skip first character (entry type).  */
  132.       fprintf (file, "%s %d/%d %6ld %s ", modebuf + 1,
  133.            buf.st_uid, buf.st_gid, buf.st_size, timebuf);
  134.     }
  135.     }
  136.  
  137.   fprintf (file, "%s\n", bfd_get_filename (abfd));
  138. }
  139.